package br.com.dallasmotopecas.compra.produto.controller;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.context.ExternalContext;

import br.com.dallasmotopecas.comum.fabricante.controller.FabricanteController;
import br.com.dallasmotopecas.comum.fabricante.vo.FabricanteVo;
import br.com.dallasmotopecas.comum.produto.controller.ProdutoController;
import br.com.dallasmotopecas.comum.produto.vo.ProdutoVo;
import br.com.dallasmotopecas.util.controller.AbstractController;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;

public class GiroProdutoController extends AbstractController
{
	public GiroProdutoController(Connection connection) throws ConexaoException
	{
		super(connection);
	}

	public GiroProdutoController(ExternalContext externalContext) throws ClasseNaoEncontradaException, ConexaoException
	{
		super(externalContext);
	}
	
	public void pProdutosSemGiro(List<ProdutoVo> produtosSemGiro, List<FabricanteVo> listaFabricantes, ProdutoVo produtoVo) throws ConexaoException, ListarObjetoException
	{
		ProdutoController controller = null;
		FabricanteController fabricanteController = null;
		List<FabricanteVo> listaFabr = null;
		boolean adicionar = false;
		try
		{
			controller = new ProdutoController(getConnection());
			produtoVo = new ProdutoVo();
			controller.processarListaProdutoSemGiro(produtosSemGiro, produtoVo);
			fabricanteController = new FabricanteController(getConnection());
			fabricanteController.cListaFabri(listaFabricantes);
			
			listaFabr  = new ArrayList<FabricanteVo>();
			
			for (int i = 0; i < listaFabricantes.size(); i++)
			{
				adicionar = false;
				for (int j = 0; j < produtosSemGiro.size(); j++)
				{
					if (listaFabricantes.get(i).getId() == produtosSemGiro.get(j).getFabricanteVo().getId())	
						adicionar = true;
				}
				
				if (adicionar)
					listaFabr.add(listaFabricantes.get(i));
			}
			
			listaFabricantes.clear();
			listaFabricantes.addAll(listaFabr);
		}
		catch(ConexaoException e)
		{
			throw e;
		}
		catch (ListarObjetoException e)
		{
			throw e;
		}
		finally
		{
			controller = null;
			fabricanteController = null;
			listaFabr = null;
		}
	}
	
	public void gravarListaProdutosSemGiro(List<ProdutoVo> listaProdutos, ProdutoVo produtoVo) throws ConexaoException, InserirObjetoException, CampoObrigatorioException
	{
		ProdutoController produtoController = null;
		java.sql.Date dataRegistro = null;
		java.sql.Time horaRegistro = null;
		try
		{
			if (listaProdutos != null)
			{
				synchronized (ProdutoVo.class)
				{
					dataRegistro = new java.sql.Date(new Date().getTime());
					horaRegistro = new java.sql.Time(new Date().getTime());
					
					produtoController = new ProdutoController(getConnection());
					beginTransaction();
					for (int i = 0; i < listaProdutos.size(); i++)
					{
						listaProdutos.get(i).setDataRegistro(dataRegistro);
						listaProdutos.get(i).setHoraRegistro(horaRegistro);
						listaProdutos.get(i).setTipoGiro("S");
						listaProdutos.get(i).setQuantidadeDiaGiro(produtoVo.getQuantidadeDiaGiro());
						listaProdutos.get(i).setQuantidadeDiaReposicao(produtoVo.getQuantidadeDiaReposicao());
						produtoController.inserirProdutoGiro(listaProdutos.get(i));
					}
					commit();
				}
			}
		}
		catch(InserirObjetoException e)
		{
			rollback();
			throw e;
		}
		catch (CampoObrigatorioException e)
		{
			rollback();
			throw e;
		}
		finally
		{
			produtoController = null;
			dataRegistro = null;
			horaRegistro = null;
		}
	}
}
